﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
using System.Data;

namespace DAL
{
    //一个实体对象相当于表中一行记录
    public class RoleDal
    {
        //增加实体对象
        public static bool Add(Role o)
        {
            string sql = string.Format("insert into Role values('{0}','{1}','{2}')", o.name, o.Code, o.Authority);
            return DBHelper.ExecuteNonQuery(sql);
        }
        //根据id删除实体对象
        public static bool Delete(int id)
        {
            string sql = "delete from Role where Id=" + id;
            return DBHelper.ExecuteNonQuery(sql);
        }
        //根据id修改实体对象
        public static bool Update(Role o)
        {
            string sql = string.Format("update Role set Name='{0}',Code='{1}',Authority='{2}' where Id={3}", o.name, o.Code, o.Authority, o.Id);
            return DBHelper.ExecuteNonQuery(sql);
        }
        //万能查询（包括分页排序）
        public static List<Role> Select(string sql)
        {
            DataTable dt = DBHelper.GetDataTable(sql);//调用DBHelperr类查询得到表格
            List<Role> objs = new List<Role>();//创建保存实体对象（记录行）的list集合，相当于表
            if (dt != null && dt.Rows.Count > 0)//如果查询表格有至少一条数据，转化成实体对象
            {
                for (int i = 0, len = dt.Rows.Count; i < len; i++)
                {
                    Role obj = new Role();//实体类对象（相当于数据表一行）
                    DataRow row = dt.Rows[i];//当前行
                    obj.Id = int.Parse(row["id"].ToString());
                    obj.name = row["name"].ToString();//将表当前行的某列值存储在对象的属性。对象属性相当于列。
                    obj.Code = row["Code"].ToString();
                    obj.Authority = row["Authority"].ToString();
                    objs.Add(obj);//将实体对象添加到集合
                }
            }
            return objs;//返回集合，相当于表格。如果查询没有数据，则返回长度为0的集合。
        }
        //  SelectAll(" id=1")根据id查询
        //  SelectAll(" name='{0}'")根据id查询
        //根据 条件 查询 所有满足条件的记录  万能查询（除了分页）
        public static List<Role> SelectAll(string where)
        {
            string sql = "select * from Role ";
            if (!string.IsNullOrEmpty(where))//如果传递了条件查询参数，则拼接条件语句
            {
                sql = sql + " where " + where;
            }
            return Select(sql);//
        }
        //根据id查询单个实体对象
        public static Role SelectOne(int id)
        {
            List<Role> objs = SelectAll(" Id=" + id);//调用万能查询方法 传递参数 参数满足条件的记录
            if (objs.Count > 0)//如果查询结果大于0 则取第一个 返回
            {
                return objs[0];
            }
            return null;
        }
        //获取记录总数
        public static int GetTotal()
        {
            string sql = "select count(*) from Role";
            object r = DBHelper.ExecuteScalar(sql);
            return (int)r;
        }
        //分页查询
        public static List<Role> SelectAllByPage(int pageSize, int PageNo)
        {
            string sql = "select top " + pageSize + " * from Role where ID not in ("
              + " select top " + pageSize * (PageNo - 1) + " ID  from Role )";
            return Select(sql); 
        }

    }
}
